package com.cspm.common.util;

import org.apache.log4j.Logger;


/**
 * Log输出封装
 *
 * @author CHENQUAN
 * @date 2016年8月31日下午4:21:32
 */
public class LoggerUtil {

    /**
     * 是否开启Debug
     */
    public static boolean isDebug = Logger.getLogger(LoggerUtil.class)
            .isDebugEnabled();

    /**
     * warn 输出
     *
     * @param clazz   目标.Class
     * @param message 输出信息
     */
    public static void warn(Class<? extends Object> clazz, String message) {
        if (!isDebug)
            return;
        Logger logger = Logger.getLogger(clazz);
        logger.warn(message);
    }

    /**
     * warn 输出
     *
     * @param clazz   目标.Class
     * @param message 输出信息
     */
    public static void warn(Class<? extends Object> clazz, String message,
                            Throwable t) {
        if (!isDebug)
            return;
        Logger logger = Logger.getLogger(clazz);
        logger.warn(message, t);
    }

    /**
     * info 输出
     *
     * @param clazz   目标.Class
     * @param message 输出信息
     */
    public static void info(Class<? extends Object> clazz, String message) {
        if (!isDebug)
            return;
        Logger logger = Logger.getLogger(clazz);
        logger.info(message);
    }

    /**
     * Debug 输出
     *
     * @param clazz   目标.Class
     * @param message 输出信息
     */
    public static void debug(Class<? extends Object> clazz, String message) {
        if (!isDebug)
            return;
        Logger logger = Logger.getLogger(clazz);
        logger.debug(message);
    }

    /**
     * Debug 输出
     *
     * @param clazz     目标.Class
     * @param fmtString 输出信息key
     * @param value     输出信息value
     */
    public static void fmtDebug(Class<? extends Object> clazz,
                                String fmtString, Object... value) {
        if (!isDebug)
            return;
        if (StringUtil.isBlank(fmtString)) {
            return;
        }
        if (null != value && value.length != 0) {
            fmtString = String.format(fmtString, value);
        }
        debug(clazz, fmtString);
    }

    /**
     * Error 输出
     *
     * @param clazz   目标.Class
     * @param message 输出信息
     * @param e       异常类
     */
    public static void error(Class<? extends Object> clazz, String message,
                             Exception e) {
        Logger logger = Logger.getLogger(clazz);
        if (null == e) {
            logger.error(message);
            return;
        }
        logger.error(message, e);
    }

    /**
     * Error 输出
     *
     * @param clazz   目标.Class
     * @param message 输出信息
     */
    public static void error(Class<? extends Object> clazz, String message) {
        error(clazz, message, null);
    }

    /**
     * 异常填充值输出
     *
     * @param clazz     目标.Class
     * @param fmtString 输出信息key
     * @param e         异常类
     * @param value     输出信息value
     */
    public static void fmtError(Class<? extends Object> clazz, Exception e,
                                String fmtString, Object... value) {
        if (StringUtil.isBlank(fmtString)) {
            return;
        }
        if (null != value && value.length != 0) {
            fmtString = String.format(fmtString, value);
        }
        error(clazz, fmtString, e);
    }

    /**
     * 异常填充值输出
     *
     * @param clazz     目标.Class
     * @param fmtString 输出信息key
     * @param value     输出信息value
     */
    public static void fmtError(Class<? extends Object> clazz,
                                String fmtString, Object... value) {
        if (StringUtil.isBlank(fmtString)) {
            return;
        }
        if (null != value && value.length != 0) {
            fmtString = String.format(fmtString, value);
        }
        error(clazz, fmtString);
    }
}
